package com.itheima.service;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.excption.MyException;
import com.itheima.pojo.*;
import com.itheima.vo.PageResultVo;
import com.itheima.vo.PmsProductAttributeCategoryVo;
import com.itheima.vo.PmsProductCategoryVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class PmsProductAttributeCategoryService {

    @DubboReference
    private PmsProductAttributeCategoryApi pmsProductAttributeCategoryApi;
    ;

    /**
     * 添加商品属性分类
     * @param pmsProductAttributeCategory
     * @return
     */
    public void create(PmsProductAttributeCategory pmsProductAttributeCategory) {
        Boolean flag = pmsProductAttributeCategoryApi.create(pmsProductAttributeCategory);

        if (!flag) {
            //品牌名重复
            throw new MyException("类型名称重复,添加失败");
        }
    }

    /**
     * 删除活动
     * @param id
     * @return
     */
    public void delete(Integer id) {
        PmsProductAttributeCategory category=  pmsProductAttributeCategoryApi.findById(id);
        if (ObjectUtil.isEmpty(category))throw new MyException("没有此分类");
        pmsProductAttributeCategoryApi.delete(id);
    }

    /**
     * 分页查询
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageResultVo<PmsProductAttributeCategory> list(Integer pageNum, Integer pageSize) {

        List<PmsProductAttributeCategory> categories = pmsProductAttributeCategoryApi.findAll();
        List<PmsProductAttribute> categories2 = new ArrayList<>();

        //遍历
        for (PmsProductAttributeCategory category : categories) {
            //获取商品属性id
            Integer id = category.getId();
            //获取下级信息
            int i = 0;
            int j = 0;
            categories2 = pmsProductAttributeCategoryApi.findId(id);
            for (PmsProductAttribute pmsProductAttribute : categories2) {
                Integer type = pmsProductAttribute.getType();
                if (type == 0) {
                    i = i + 1;
                } else {
                    j = j + 1;
                }
            }
            PmsProductAttributeCategory pmsProductAttributeCategory = new PmsProductAttributeCategory();
            pmsProductAttributeCategory.setAttributeCount(i);
            pmsProductAttributeCategory.setParamCount(j);
            pmsProductAttributeCategoryApi.update(id, pmsProductAttributeCategory);
        }

        //分页
        IPage<PmsProductAttributeCategory> iPage = pmsProductAttributeCategoryApi.list(pageNum, pageSize);
        PageResultVo<PmsProductAttributeCategory> pageResultVo = new PageResultVo<>();
        pageResultVo.setList(iPage.getRecords());
        pageResultVo.setPageNum(pageNum);
        pageResultVo.setPageSize(pageSize);
        pageResultVo.setTotal(Convert.toInt(iPage.getTotal()));
        pageResultVo.setTotalPages(Convert.toInt(iPage.getPages()));
        return pageResultVo;
    }

    /**
     * 修改商品属性
     *
     * @param id
     * @param
     * @return
     */
    public void update(Integer id, PmsProductAttributeCategory pmsProductAttributeCategory) {
        pmsProductAttributeCategoryApi.update(id, pmsProductAttributeCategory);
    }

    /**
     * 获取单个属性
     *
     * @param id
     * @return
     */
    public PmsProductAttributeCategory findById(Integer id) {
        return pmsProductAttributeCategoryApi.findById(id);
    }

    /**
     * 获取所有商品属性分类及其下属性
     *
     * @return
     */
    public List<PmsProductAttributeCategoryVo> withAttr() {
        List<PmsProductAttributeCategory> categories = pmsProductAttributeCategoryApi.findAll();
        List<PmsProductAttribute> categories2 = new ArrayList<>();
        List<PmsProductAttributeCategoryVo> productAttributeList = new ArrayList<>();

        //遍历
        for (PmsProductAttributeCategory category : categories) {
            //获取商品属性id
            Integer id = category.getId();
            //获取下级信息
            categories2 = pmsProductAttributeCategoryApi.findId(id);
            PmsProductAttributeCategoryVo categoryVo = new PmsProductAttributeCategoryVo();
            BeanUtils.copyProperties(category, categoryVo);
            productAttributeList.add(categoryVo);
            categoryVo.setProductAttributeList(categories2);


        }
        return productAttributeList;
    }
}
